package org.example.juc.sync.v1;

/**
 * Copyright (C), 2022, szw
 * FileName: SynchronizedTestV1
 *
 * @author songyafei
 * Date:     2022/1/25 9:29
 * Description: synchronized demo
 *  synchronized 讲解：
 *   synchronized的底层实现
 * JDK早期的 重量级 - OS
 * 后来的改进
 * 锁升级的概念：
 *     参考： 我就是厕所所长 （一 二）
 *
 * sync (Object)
 * markword 记录这个线程ID （偏向锁）
 * 如果线程争用：升级为 自旋锁
 * 10次以后，
 * 升级为重量级锁 - OS
 *
 * 执行时间短（加锁代码），线程数少，用自旋
 * 执行时间长，线程数多，用系统锁
 *
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
public class SynchronizedTestV1 {

    private int count = 10;
    private Object o = new Object();

    public void m() {
        //任何线程要执行下面的代码，必须先拿到o的锁
        synchronized(o) {
            count--;
            System.out.println(Thread.currentThread().getName() + " count = " + count);
        }
    }
}
